"""
1.各个功能文件中，用到的库和导包，都写清楚（安装命令、import语句，以及其他一些注意点）
2.分页面来完成
"""
import base64
#from smtpd import Options
import time

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

from Python.Python.utils.slider_match import calculate_slider_offset
import utils.time_utils as myTime

'''
页面及功能：
cso登录
cso-兼职包的单个发布（成功/名称重复而失败）
'''
#导包/导入函数
from selenium import webdriver#
#from webdriver_manager.chrome import ChromeDriver

#print("for test")#用于验证不是环境的问题：这句打印可以执行出来


#创建浏览器driver，两种方法：
#一、随运行，实时下载，但是容易受到网络影响，速度不稳定
#二、下载驱动到本地，直接通过代码，设置为调用本地驱动

#下载驱动到本地，直接通过代码，设置为调用本地驱动
#初始化 Options 并配置浏览器参数（可选，根据需求添加）
#options = Options()
# 示例：添加常见配置（可选）
#~~~提示：没有add_argument这个选项，可能是环境有点不一样？
#options.add_argument("--start-maximized")  # 最大化窗口
#options.add_argument("--remote-allow-origins=*")

'''
driver配置
华为--start
'''
# driver_path = "D:\SML\chromedriver-win64\chromedriver-win64\chromedriver.exe" # 下载好的驱动文件夹，解压之后里面会有一个**driver.exe，这里填这个文件的位置（华为）
#
# #创建驱动
# driver = webdriver.Chrome(service=Service(driver_path))#需要导入：from selenium.webdriver.chrome.service import Service
'''
--华为end
'''

'''
driver配置
公司第二台电脑--start
'''
driver = webdriver.Chrome()#新版selenium，无需配置driver
'''
--公司第二台电脑end’
'''



driver.maximize_window()

#打开网页
driver.get("https://pre.yaoyi.net/#/login")

#隐式等待，提高稳定性
driver.implicitly_wait(20)


#登录：
#输入账号、密码，点击“登录”
driver.find_element("xpath",'//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[1]/div/div/input').send_keys("18233490002")
driver.find_element("xpath",'//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[3]/div/div/input').send_keys("490002")
driver.find_element('xpath','//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[5]/div/button').click()


#验证码界面：TODO整理成单独的文档，方便复用
#获取验证码图片（注意要转换成二进制）
big_ele = driver.find_element("xpath",'/html/body/div[3]/div/div[2]/div/div[1]/div/img')
small_ele = driver.find_element("xpath",'/html/body/div[3]/div/div[2]/div/div[2]/div/div/div/img')
big_src = big_ele.get_attribute("src")
small_src = small_ele.get_attribute("src")
#获取标准的base64编码
# big_base64 = big_src.split(",")[1]
big_src = big_src[big_src.find(',')+1:]#
small_src = small_src[small_src.find(',')+1:]
#写入文件（写入二进制）
#把base64转成二进制文件#import base64
with open('./big.png',mode='wb') as f :#python中的垃圾回收机制
    #先把base64转换成二进制，然后写入文件
    f.write(base64.b64decode(big_src))


with open('./small.png',mode='wb') as f :#python中的垃圾回收机制
    #先把base64转换成二进制，然后写入文件
    f.write(base64.b64decode(small_src))

#控制滑块的按钮
slider = driver.find_element("xpath","/html/body/div[3]/div/div[2]/div/div[2]/div/div")
print("成功获取到控制滑块的按钮")

#计算滑块在网页实际要滑动的距离
distance = calculate_slider_offset("./big.png","./small.png")*(661/617)
ActionChains(driver).drag_and_drop_by_offset(slider, distance, 0).perform()
print("滑块验证通过！！！")
# TODO优化，偶尔的滑块认证失败，可以重新认证
# if is_element_exist(("By.XPATH","/html/body/div[5]/div/div[1]/span")):
#     driver.implicitly_wait(10)
#     print("滑块验证通过！！！")
#     break


#输入验证码，点击登录
print("输入验证码，点击登录")
driver.find_element("xpath", "/html/body/div[5]/div/div[2]/form/div[2]/div/button/span").click()
driver.find_element("xpath", "/html/body/div[5]/div/div[2]/form/div[2]/input").send_keys("5657")
driver.find_element("xpath", "/html/body/div[5]/div/div[3]/span/button").click()
print("可以查找界面元素，查看是否登录成功")

#关闭遮挡
driver.find_element("xpath", '''//*[@id="app"]/div[1]/div[4]/div[1]/div[1]''').click()
















#点击【任务管理】-》【个人积分包管理】-》
driver.find_element("xpath",'''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/div''').click()
print("打开【任务管理】成功")


#~~~提示：这里总是失败
#driver.find_element("xpath",'''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/ul/li[4]/span''').click()
#driver.find_element("cssSelector",'''#app > div.avue-contail > div.avue-layout > div.avue-left > div > div.el-scrollbar > div.el-scrollbar__wrap > div > ul > div > li.el-submenu.is-active.is-opened > ul > li.el-menu-item.is-active.item-active > span''')
#driver.find_element('xpath', '''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/ul/li[4]''').click()

#被遮挡导致无效的元素
ele = driver.find_element('xpath', '''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/ul/li[4]/span''')
#ActionChains(driver).move_to_element(ele).click().perform()
ele.click()
print("打开【个人积分包管理】成功")
print("点击【任务管理】-》【个人积分包管理】-》——完成")


#here2
#here
'''

新增

'''

#点击“新增”
driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/div/div[1]/div/button[1]''').click()
print("点击“新增”——完成")


#选择“上游服务企业”
driver.find_element("xpath",'/html/body/div[5]/div/div[2]/div/form/div[2]/div/div/div/div/div/span/span/i').click()
driver.find_element("xpath","/html/body/div[7]/div[1]/div[1]/ul/li[2]").click()
print("选择“上游服务企业”——完成")


#选择“上游积分包”
driver.find_element("xpath",'''/html/body/div[5]/div/div[2]/div/form/div[3]/div[1]/div/div/div/div/span/span/i''').click()
driver.find_element('xpath','''/html/body/div[8]/div[1]/div[1]/ul/li[7]''').click()

#选择“接包对象类型”
driver.find_element('xpath','''/html/body/div[5]/div/div[2]/div/form/div[5]/div[1]/div/div/div/div/span/span/i''').click()
print("下拉框——点击完成")
driver.find_element('xpath','''/html/body/div[9]/div[1]/div[1]/ul/li[2]''').click()
print("选择兼职人员——完成")
print("选择“接包对象类型”——完成")

#填写积分包名称
print("填写积分包名称——开始")
#当前时间：
curtime2 = myTime.get_current_time_digits('second')
print(curtime2)
curtime3 = "SSS" + curtime2[4:]
print(curtime3)
packageName=curtime3
#注释掉：第一个包名driver.find_element('xpath','''/html/body/div[5]/div/div[2]/div/form/div[9]/div/div[1]/div[3]/table/tbody/tr/td[2]/div/div/input''').send_keys("SSS1")
driver.find_element('xpath','''/html/body/div[5]/div/div[2]/div/form/div[9]/div/div[1]/div[3]/table/tbody/tr/td[2]/div/div/input''').send_keys(packageName)

print("填写积分包名称——完成")

#填写积分包值
driver.find_element('xpath','''/html/body/div[5]/div/div[2]/div/form/div[9]/div/div[1]/div[3]/table/tbody/tr/td[3]/div/div/input[1]''').send_keys("3")


#点击“确定”
driver.find_element('xpath','''/html/body/div[5]/div/div[3]/span/button[2]/span''').click()
print("点击“确定，新增积分包成功")


#观察效果，并等待小程序操作完
input("观察浏览器界面效果：1.是否新建成功？2.小程序领取后，请在控制台输入任意字符回车继续执行脚本")

'''
新增结束
'''


'''
接单审批：

'''
#开始“接单审批”
print("开始“接单审批”")
input("观察效果")
#首先：刷新页面
driver.refresh()
print("刷新页面成功")
#定位到刚才新增的积分包,获取积分包名称
#driver.find_element('xpath','''//*[@id="app"]//form//td[13]/div/div/div/button[5]''').click()#TODO这里可以优化，目前效果是点击第一个，想办法用xpath定位更准。
# try:
#     driver.find_element('xpath',
#                         '''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr[2]/td[13]/div/div/div/button[5]''').click()  # TODO这里可以优化，目前效果是点击第一个，想办法用xpath定位更准。
# except ElementNotInteractableException:
#     print("还是显示不可交互，实际也没点过去。")
#“包名”在第一个td，“接单审批”按钮在第13个td（从1开始）
#//*[@id="app"]//form//td[13]/div/div/div/button[5]

#页面第二个包driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr[2]/td[13]/div/div/div/button[5]''').click()  # TODO这里可以优化，目前效果是点击第一个，想办法用xpath定位更准。
#页面第一个包：
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr[1]/td[13]/div/div/div/button[5]''').click()

print("点击“接单审批”按钮成功")



#点击“同意”
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[2]/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr/td[9]/div/div/button[1]''').click()

print("点击“同意”成功")
#是否同意——是
print("是——同意")#这里可以回车，也可以定位之后click()，但是我看了看一下回车键控制，感觉还不如xpah简单
# driver.find_element('xpath','''/html/body/div[3]/div/div[3]/button[2]/span''').send_keys(Keys.ENTER)#这是输入回车符号，而不是按下回车键——我觉得
driver.find_element('xpath','''/html/body/div[3]/div/div[3]/button[2]/span''').click()
print("点击“是”成功")
#返回!!!
#注意，这里不能自动返回。
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/p/button''').click()






#小程序已经提交
input("小程序是否已经提交成功？请输入任意字符回车继续执行脚本")
#刷新页面
print("刷新页面：")
driver.refresh()
print("刷新页面成功")
'''
任务审核：

'''
#进行：任务审核
print("开始任务审核")
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr[1]/td[13]/div/div/div/button[6]''').click()
print("点击“任务审核”成功")
#点击“审核”
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div[1]/div/form/div/div[5]/div[2]/table/tbody/tr/td[11]/div/div/div/button[2]''').click()
print("点击“审核”成功")
#审批意见——通过
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[2]/div/div[2]/form/div[4]/div/div/label[1]''').click()
print("填写“审批意见”成功")
#点击“确定”
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[2]/div/div[3]/span/button[2]''').click()
print("点击“确定”成功")
#返回
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[1]/div/div[1]/div[1]''').click()
print("返回成功")
#there


#here1
'''
业务提交结算；

'''
#点击结算
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div[1]/div/form/div/div[4]/div[2]/table/tbody/tr[1]/td[13]/div/div/div/button[8]''').click()
print("点击“结算”成功")
# #控制滚轮，滚到底部——无效。。。TODO
# driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 定位目标元素（即使当前不可见）
target_element = driver.find_element(By.XPATH, '''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[8]/div/div[3]/span/button[3]''')

# 滚动到元素位置（使其可见）
driver.execute_script("arguments[0].scrollIntoView();", target_element)





# #控制页面缩放，方便找到元素——缩放之后，页面出现气泡弹窗错误！！！TODO
# zoom_level = 0.8  # 1.0 为默认大小，0.5 为 50%，2.0 为 200% 等
# driver.execute_script(f"document.body.style.zoom = {zoom_level};")
#input("按回车退出...")
print("开始输入结算信息:")
#input("下拉：")
#下拉
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[8]/div/div[2]/div/div[4]/form/div/div[1]/div/div/div/div[1]/span/span/i''').click()
#input("选税地：")
#选择税地——徐州禧芙
driver.find_element('xpath','''/html/body/div[6]/div[1]/div[1]/ul/li[3]''').click()

#input("看清楚了嘛？")

#input("下拉：")
#下拉
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[8]/div/div[2]/div/div[4]/form/div/div[3]/div/div/div/div/input''').click()


input("选类目：")
#选择发票类目
driver.find_element('xpath','''/html/body/div[5]/div[1]/div[1]/ul/li''').click()

                                         #/html/body/div[5]/div[1]/div[1]/ul/li#自动化时的
#input("看清楚了嘛？")


#点击确定
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[8]/div/div[3]/span/button[3]''').click()
print("点击“确定”成功")


#查看是否提交结算成功
input("看清楚了了吗？是否提交成功？请输入任意字符回车继续执行脚本")


#there1

'''
财务提交结算：
注意！！！这里会有弹窗！！！
'''
#进入“积分包结算管理”页面
driver.get("https://pre.yaoyi.net/#/admin/settle/index")
print('点击“获取验证码”：')
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[3]/div/div[2]/button''').click()
print('输入验证码：')
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[3]/div/div[2]/div/input''').send_keys('5657')
print("点击“下一步：")
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[3]/div/div[3]/button''').click()


#~input("观察一下~")

#对第一条记录TODO这里可以优化
print("点击结算1：")
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[1]/div/div/div[1]/div[2]/div/form/div/div[5]/div[2]/table/tbody/tr[1]/td[19]/div/div/button[1]''').click()



#控制滚动，防止找不到（这里没有试找不到的情况）
# 定位目标元素（即使当前不可见）
target_element = driver.find_element(By.XPATH, '''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[1]/div/div/div[2]/div/div[3]/span/button[2]''')
# 滚动到元素位置（使其可见）
driver.execute_script("arguments[0].scrollIntoView();", target_element)
print("滚动成功！")

#已经滚动到该元素啦，可以点击了
target_element.click()
print("点击“结算2”成功")

#对弹窗点击“确定”
#动态，弃用：driver.find_element('xpath','''/html/body/div[7]/div/div[3]/button[2]''').click()#/html/body/div[3]/div/div[3]/button[2]#每次点进来都不一样？？？/html/body/div[6]/div/div[3]/button[2]
driver.find_element('xpath','''//div[@tabindex='-1' and @role='dialog']//button[2]''').click()#/html/body/div[3]/div/div[3]/button[2]#每次点进来都不一样？？？/html/body/div[6]/div/div[3]/button[2]
print("点击“确定”成功")
print("提交复核成功")

#~input("可以观察一下~")
#there2


# print("对弹窗点击结算：")
# driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[1]/div/div/div[2]/div/div[3]/span/button[2]''')


'''

财务复核：

'''

driver.get("https://pre.yaoyi.net/#/admin/settle/settlementReview")
print('成功进入：结算复核页面')
#TODO这里可以优化，写死了，第二条数据是本次代码要处理的~
#input("看一下这里的xpath")
#driver.find_element('xpath','''//tr[2]/td[10]//button[2]''').click()
#！！！代码执行太快了，这里有弹出！！！遮挡了，操作不了所以提示不可交互，等一下吧
time.sleep(3)
#driver.find_element('xpath','''//tr[2]/td[10]//button[2]/span[text()="复核"]''').click()
#driver.find_element('xpath','''//tr[2]/td[10]//button[2]''').click()
#TODO这里点击总是无效，所以尝试用js点击了
ele = driver.find_element('xpath','''//tr[2]/td[10]//button[2]''')
driver.execute_script('arguments[0].click()', ele)
try:
    ele.click()
except Exception as e:
    print(e)
print("点击“复核”成功")
#1.edge-xpath://*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/form/div/div[5]/div[2]/table/tbody/tr[2]/td[10]/div/div/button[2]/span
#点击弹窗的结算
#ch-xpath://*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/form/div/div[5]/div[2]/table/tbody/tr[2]/td[10]/div/div/button[2]/span
driver.find_element('xpath','''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div/div/div[2]/div/div[1]/div/div/div[3]/div/div[3]/span/button[2]''').click()
print("提交到税地~")


#~input("观察一下~")
#









###input("debug~~~")
#time.sleep(1)#import time